package Server.UI.interfacceProprietario;

import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;

import javax.swing.*;

import Server.Controller.CVisualizzareFatture;

import Server.Entity.Dominio.*;
import Server.UI.PanelComponent;

/**
 * /**
 * Classe CocreteDecoretor che deriva da PannelloDatiTask.
 * Essa si occupa di costruire il pannello per la visualizzazione la fattura del progetto 
 * @author Gruppo 6
 *
 */
 
public class PannelloFatturaProgetto extends PanelComponent {
	
	private EFattura fattura = new EFattura();
	//private CVisualizzareFatture CFattura = new CVisualizzareFatture();
	private int lineeFatturaHeight = 0;
	private int lineeStrategiaHeight = 0;
	
	private JPanel pannelloFattura = new JPanel(null);
	private JPanel contornoFattura = new JPanel(null);
	private JPanel pannelloSfondo = new JPanel(null);
	private JScrollPane scrollPane;
	
	private JPanel intestazione = new JPanel();
	private JPanel informazioni = new JPanel();
	private JPanel lineeStrategia = new JPanel();
	private JPanel lineeFattura = new JPanel();
	private JPanel footer = new JPanel();


	/**
	 * Costruttore. Al costruttore viene passato anche l'instanza di EFattura da visualizzare
	 * @param parent
	 * @param fattura
	 */
	public PannelloFatturaProgetto (PanelComponent parent, EFattura fattura){
		super(parent);
		this.fattura = fattura;
		setIntestazione(); //intestazione
		setInformazioni();//inf
		setLineeStrategia();//politiche
		setLineeFattura();//regole
		setFooter(); //modulo firma
	}	
	
	
	/**
	 * Crea e restiruisce pannellocomponente per la visualizzazione della fattura 
	 * @Override
	 */
	public JPanel createComponents() {

		pannellocomponente = new JPanel(null);
		
		
		pannelloSfondo.setBounds(0, 0, 1250, 530 + lineeFatturaHeight + lineeStrategiaHeight); //1250, 530
		pannelloSfondo.setPreferredSize(new Dimension(1050,530 + lineeFatturaHeight + lineeStrategiaHeight));		
		
		pannelloFattura.setBackground(Color.white);
		pannelloFattura.setBounds(75, 10, 960, 515 + lineeFatturaHeight + lineeStrategiaHeight);//155,10,970,515
		pannelloFattura.setBorder(BorderFactory.createLineBorder(Color.black));
		pannelloFattura.setLayout(null);
		
		pannelloFattura.add(intestazione);
		pannelloFattura.add(informazioni);
		pannelloFattura.add(lineeStrategia);
		pannelloFattura.add(lineeFattura);		
		pannelloFattura.add(footer);		
		
		pannelloSfondo.add(pannelloFattura);
		
		scrollPane = new JScrollPane(pannelloSfondo);
        scrollPane.setBounds(30, 10, 1150, 425); //1300,425
        scrollPane.setBorder(BorderFactory.createLineBorder(Color.black));    
		
		//contornoFattura.add(scrollPane);
		
		//pannellocomponente.add(contornoFattura);
        pannellocomponente.add(scrollPane);
		super.setSize(scrollPane.getSize());
		
		return pannellocomponente;
	}

	/**
	 * permette di creare l'intestazione della fattura con il logo
	 */
	public void setIntestazione() {

		intestazione.setBounds(1, 1, 968, 180);
		intestazione.setBackground(Color.white);
		intestazione.setLayout(null);
		
		JLabel logo = new JLabel();
		JLabel payoff = new JLabel("Time Logging");		
		
		logo.setIcon(new ImageIcon("src\\Server\\UI\\img\\TLLogo.gif"));
		
		logo.setBounds(50, 20, 150, 150);
		payoff.setBounds(250, 20, 600, 150);
		
		Font currentFont = intestazione.getFont();
	    Font newFont = new Font(currentFont.getName(), Font.ITALIC, 40);
	    payoff.setFont(newFont);		
		
		intestazione.add(logo);
		intestazione.add(payoff);
	}

	/**
	 * aggiunge le informazioni del progetto
	 */
	public void setInformazioni() {
		informazioni.setLayout(null);
		informazioni.setBackground(Color.white);
		informazioni.setBounds(1,181,968,170);
		
		Font currentFont = informazioni.getFont();
	    Font etichettaFont = new Font(currentFont.getName(), Font.BOLD , 16);
	    Font valoreFont = new Font(currentFont.getName(), Font.ITALIC , 14);			    

	    
		JLabel fatturaNoEtichetta = new JLabel("Fattura No: ");
		fatturaNoEtichetta.setBounds(100,20,150,50);
		fatturaNoEtichetta.setFont(etichettaFont);
		
		JLabel dataEtichetta = new JLabel("<html>Data di <br>emissione: </html>");
		dataEtichetta.setBounds(600,20,150,50);
		dataEtichetta.setFont(etichettaFont);		
		
		JLabel progettoEtichetta = new JLabel("Progetto: ");
		progettoEtichetta.setBounds(100,70,150,50);
		progettoEtichetta.setFont(etichettaFont);		

		JLabel clienteEtichetta = new JLabel("Cliente: ");
		clienteEtichetta.setBounds(600,70,150,50);
		clienteEtichetta.setFont(etichettaFont);		
		
		JLabel totaleEtichetta = new JLabel("_Totale: ");
		totaleEtichetta.setBounds(600,120,150,50);
		totaleEtichetta.setFont(etichettaFont);		
		
		
		JLabel fatturaNo = new JLabel( fattura.getId() + "");
		fatturaNo.setBounds(250,20,150,50);
		fatturaNo.setFont(valoreFont);
		JLabel data;
		
		try{data = new JLabel(fattura.getDataEmissione());}catch (Exception e) {data = new JLabel("");}
		data.setBounds(750,20,150,50);
		data.setFont(valoreFont);		
		
		JLabel progetto ;
		try{progetto = new JLabel(fattura.getProgetto().getNome());} catch (Exception e) {progetto = new JLabel("");}
		progetto.setBounds(250,70,150,50);
		progetto.setFont(valoreFont);		

		JLabel cliente; 
		try{cliente = new JLabel(fattura.getCliente().getNome());} catch (Exception e){cliente = new JLabel("");}
		cliente.setBounds(750,70,150,50);
		cliente.setFont(valoreFont);		
		
		JLabel totale = new JLabel();
		
		if(fattura.getTotale() != null)
			totale = new JLabel(fattura.getTotale().getPrezzo() + " " + fattura.getTotale().getValuta());
		totale.setBounds(750,120,150,50);
		totale.setFont(valoreFont);
		totale.setForeground(Color.RED);
		
		
		informazioni.add(fatturaNoEtichetta);
		informazioni.add(dataEtichetta);
		informazioni.add(progettoEtichetta);
		informazioni.add(clienteEtichetta);
		informazioni.add(totaleEtichetta);

		informazioni.add(fatturaNo);
		informazioni.add(data);
		informazioni.add(progetto);
		informazioni.add(cliente);
		informazioni.add(totale);
	}

	/**
	 * aggiunge informazioni sulle politiche usate
	 */
	public void setLineeStrategia() {

		lineeStrategia = new JPanel(null);
		lineeStrategia.setLayout(new BoxLayout(lineeStrategia,BoxLayout.PAGE_AXIS));
		lineeStrategia.setBackground(Color.white);
		lineeStrategia.setBorder(BorderFactory.createTitledBorder("Regole di fatturazione"));
		
		Component fill = Box.createRigidArea(new Dimension(0,10));
		lineeStrategia.add(fill);
		
		int nLinee = 0;


		for(ELineaRegola lineaRegola : fattura.getRegoleFattura())
		{
			lineeStrategia.add(createPannelloLineaRegola(lineaRegola));
			nLinee++;
		}
		fattura.getRegoleFattura().clear();
				
		lineeStrategiaHeight = nLinee *50;
		lineeStrategia.setBounds(20,351,930,lineeStrategiaHeight);
		
	}	
	
	/**
	 * aggiunge informazioni sulla regole
	 */
	public void setLineeFattura() {
		lineeFattura.removeAll();
		lineeFattura.setLayout(new BoxLayout(lineeFattura,BoxLayout.PAGE_AXIS));
		lineeFattura.setBackground(Color.white);
		lineeFattura.setBorder(BorderFactory.createTitledBorder("Riepilogo Fattura"));
		
		Component fill = Box.createRigidArea(new Dimension(0,10));
		lineeFattura.add(fill);
		
		lineeFattura.add(creaPannelloLineaProgetto());
		
		int nLinee = 1;
		for(ELineaSottoprogetto lineaSottoprogetto : fattura.getLineeFattura().getLineesottoprogetto())
		{
			lineeFattura.add(createPannelloLineaSottoprogetto(lineaSottoprogetto));
			nLinee++;
			
			for(ELineaTask lineaTask : lineaSottoprogetto.getLineetask())
			{
				lineeFattura.add(createPannelloLineaTask(lineaTask));
				nLinee++;
				
				for(ELineaTimeRecord lineaTimeRecord : lineaTask.getLineeTimerecord())
				{
					lineeFattura.add(createPannelloLineaTimeRecord(lineaTimeRecord));
					nLinee++;
				}
			}
		}
		
		lineeFatturaHeight = nLinee * 36;
		lineeFattura.setBounds(20,lineeStrategiaHeight + 381,930, lineeFatturaHeight);
		
	}
 /**
  * aggiunge modulo per la firme
  */
	public void setFooter() {
		footer.setLayout(null);
		footer.setBackground(Color.white);
		footer.setBounds(1,401 + lineeFatturaHeight + lineeStrategiaHeight,968,100);

		Font font1 = new Font(footer.getFont().getFontName(), footer.getFont().getStyle(), 14);
		Font font2 = new Font(footer.getFont().getFontName(), Font.ITALIC, 14);		
		
		JLabel data = new JLabel("Data : " + fattura.getDataEmissione().substring(0, 10), JLabel.CENTER);
		data.setBounds(66,0,200,100);
		data.setFont(font1);
		
		JLabel firma = new JLabel("<html>Il proprietario: <br> <br>_________________________________</html>", JLabel.CENTER);
		firma.setBounds(650,0,200,100);
		firma.setFont(font2);
		
		footer.add(data);
		footer.add(firma);
	}	
	
	/**
	 * crea pannello per mostrare il costo del progetto
	 * @return JPanel
	 */
	private JPanel creaPannelloLineaProgetto()
	{
		JPanel jlineaProgetto= new JPanel();
		jlineaProgetto.setBounds(0, 0, 1230, 30);
		jlineaProgetto.setLayout(new BoxLayout(jlineaProgetto, BoxLayout.LINE_AXIS));
		jlineaProgetto.setBackground(Color.WHITE);
		Font font = new Font(lineeFattura.getFont().getFontName(), Font.BOLD, 16);
		
		Component fillprogetto1 = Box.createRigidArea(new Dimension(75,30));
		JLabel jprogettodesc = new JLabel( "Progetto: " + fattura.getLineeFattura().getDescrizione() );
		jprogettodesc.setFont(font);
		jprogettodesc.setMinimumSize(new Dimension(400, 30));
		jprogettodesc.setMaximumSize(new Dimension(400, 30));		
		jprogettodesc.setPreferredSize(new Dimension(400, 30));		
		
		Component fillprogetto2 = Box.createRigidArea(new Dimension(252,30));
		
		JLabel jprogettocosto = new JLabel( fattura.getLineeFattura().getCosto() + "" );
		jprogettocosto.setFont(font);
		jprogettocosto.setMinimumSize(new Dimension(60, 30));
		jprogettocosto.setMaximumSize(new Dimension(60, 30));		
		jprogettocosto.setPreferredSize(new Dimension(60, 30));
		
		Component fillprogetto3 = Box.createRigidArea(new Dimension(570,30));	
		
		jlineaProgetto.add(fillprogetto1);		
		jlineaProgetto.add(jprogettodesc);
		jlineaProgetto.add(fillprogetto2);
		jlineaProgetto.add(jprogettocosto);
		jlineaProgetto.add(fillprogetto3);		
		
		return jlineaProgetto;
	}
	
	/**
	 * crea pannello per mostrare il costo dello specifico sottoprogetto
	 * @param lineaSottoprogetto
	 * @return JPanel
	 */
	
	private JPanel createPannelloLineaSottoprogetto(ELineaSottoprogetto lineaSottoprogetto)
	{
		JPanel jlineaSottoprogetto= new JPanel();
		jlineaSottoprogetto.setBounds(0, 0, 1230, 30);
		jlineaSottoprogetto.setLayout(new BoxLayout(jlineaSottoprogetto, BoxLayout.LINE_AXIS));
		jlineaSottoprogetto.setBackground(Color.WHITE);
		Font font = new Font(lineeFattura.getFont().getFontName(), lineeFattura.getFont().getStyle(), 16);		
		Color colore = new Color(0,17,38);
		
		Component fillsottoprogetto1 = Box.createRigidArea(new Dimension(100,30));
		
		JLabel jsottoprogettodesc = new JLabel( "Sottoprogetto: " + lineaSottoprogetto.getDescrizione() );
		jsottoprogettodesc.setMinimumSize(new Dimension(400, 30));
		jsottoprogettodesc.setMaximumSize(new Dimension(400, 30));		
		jsottoprogettodesc.setPreferredSize(new Dimension(400, 30));
		jsottoprogettodesc.setForeground(colore);
		jsottoprogettodesc.setFont(font);
		
		Component fillsottoprogetto2 = Box.createRigidArea(new Dimension(227,30));
		
		JLabel jsottoprogettocosto = new JLabel( lineaSottoprogetto.getCosto() + "" );
		jsottoprogettocosto.setMinimumSize(new Dimension(60, 30));
		jsottoprogettocosto.setMaximumSize(new Dimension(60, 30));		
		jsottoprogettocosto.setPreferredSize(new Dimension(60, 30));
		jsottoprogettocosto.setForeground(colore);
		jsottoprogettocosto.setFont(font);
		
		Component fillsottoprogetto3 = Box.createRigidArea(new Dimension(570,30));	
		
		jlineaSottoprogetto.add(fillsottoprogetto1);
		jlineaSottoprogetto.add(jsottoprogettodesc);
		jlineaSottoprogetto.add(fillsottoprogetto2);
		jlineaSottoprogetto.add(jsottoprogettocosto);
		jlineaSottoprogetto.add(fillsottoprogetto3);		
		
		return jlineaSottoprogetto;
	}
	
	/**
	 * crea pannello per mostrare il costro dello specifico task
	 * @param lineaTask
	 * @return JPanel
	 */
	private JPanel createPannelloLineaTask(ELineaTask lineaTask)
	{
		JPanel jlineaTask= new JPanel();
		jlineaTask.setBounds(0, 0, 1230, 30);
		jlineaTask.setLayout(new BoxLayout(jlineaTask, BoxLayout.LINE_AXIS));
		jlineaTask.setBackground(Color.WHITE);
		Font font = new Font(lineeFattura.getFont().getFontName(), lineeFattura.getFont().getStyle(), 14);		
		//Color colore = new Color(0,27,135);
		Color colore = new Color(0,20,99);
		
		Component filltask1 = Box.createRigidArea(new Dimension(125,30));		
		
		JLabel jtaskdesc = new JLabel( "Task: " + lineaTask.getDescrizione() );
		jtaskdesc.setMinimumSize(new Dimension(400, 30));
		jtaskdesc.setMaximumSize(new Dimension(400, 30));		
		jtaskdesc.setPreferredSize(new Dimension(400, 30));	
		jtaskdesc.setForeground(colore);
		jtaskdesc.setFont(font);
		
		Component filltask2 = Box.createRigidArea(new Dimension(202,30));
		
		JLabel jtaskcosto = new JLabel( lineaTask.getCosto() + "" );
		jtaskcosto.setMinimumSize(new Dimension(60, 30));
		jtaskcosto.setMaximumSize(new Dimension(60, 30));		
		jtaskcosto.setPreferredSize(new Dimension(60, 30));
		jtaskcosto.setForeground(colore);
		jtaskcosto.setFont(font);
		
		Component filltask3 = Box.createRigidArea(new Dimension(570,30));		
		
		jlineaTask.add(filltask1);
		jlineaTask.add(jtaskdesc);
		jlineaTask.add(filltask2);
		jlineaTask.add(jtaskcosto);
		jlineaTask.add(filltask3);		
		
		return jlineaTask;
	}
	
	/**
	 * crea pannello per mostrare il costro dello specifico sottoprogetto
	 * @param lineaTimerecord
	 * @return JPanel
	 */
	private JPanel createPannelloLineaTimeRecord(ELineaTimeRecord lineaTimeRecord)
	{
		JPanel jlineaTimerecord = new JPanel();
		jlineaTimerecord.setBounds(0, 0, 1000, 30);
		jlineaTimerecord.setLayout(new BoxLayout(jlineaTimerecord, BoxLayout.LINE_AXIS));
		jlineaTimerecord.setBackground(Color.WHITE);
		Font font = new Font(lineeFattura.getFont().getFontName(), Font.ITALIC, 14);		
		Color colore = new Color(0,31,155);
		
		Component filltimerecord1 = Box.createRigidArea(new Dimension(150,30));		
		
		JLabel jtimerecorddesc = new JLabel( "Time Record: " + lineaTimeRecord.getDescrizione() );
		jtimerecorddesc.setMinimumSize(new Dimension(400, 30));
		jtimerecorddesc.setMaximumSize(new Dimension(400, 30));		
		jtimerecorddesc.setPreferredSize(new Dimension(400, 30));
		jtimerecorddesc.setForeground(colore);
		jtimerecorddesc.setFont(font);
		
		Component filltimerecord2 = Box.createRigidArea(new Dimension(177,30));
		
		JLabel jtimerecordcosto = new JLabel( lineaTimeRecord.getCosto() + "" );
		jtimerecordcosto.setMinimumSize(new Dimension(60, 30));
		jtimerecordcosto.setMaximumSize(new Dimension(60, 30));		
		jtimerecordcosto.setPreferredSize(new Dimension(60, 30));
		jtimerecordcosto.setForeground(colore);
		jtimerecordcosto.setFont(font);
		
		Component filltimerecord3 = Box.createRigidArea(new Dimension(570,30));		
		
		jlineaTimerecord.add(filltimerecord1);
		jlineaTimerecord.add(jtimerecorddesc);
		jlineaTimerecord.add(filltimerecord2);
		jlineaTimerecord.add(jtimerecordcosto);
		jlineaTimerecord.add(filltimerecord3);
		
		return jlineaTimerecord;
	}
	
	/**
	 * /**
	 * crea pannello per mostrare il costro dello specifico sottoprogetto
	 * @param lineaRegola
	 * @return
	 */
	private JPanel createPannelloLineaRegola(ELineaRegola lineaRegola)
	{
		JPanel jlineaFattura= new JPanel();
		jlineaFattura.setBounds(0, 0, 1230, 30);
		jlineaFattura.setLayout(new BoxLayout(jlineaFattura, BoxLayout.LINE_AXIS));
		jlineaFattura.setBackground(Color.WHITE);
		Font font = new Font(lineeFattura.getFont().getFontName(), lineeFattura.getFont().getStyle(), 14);	
		
		Component fillprogetto1 = Box.createRigidArea(new Dimension(75,30));		
		
		JLabel jregoladesc = new JLabel( "Regola: " + lineaRegola.getDescrizione() );
		jregoladesc.setFont(font);
		jregoladesc.setMinimumSize(new Dimension(400, 30));
		jregoladesc.setMaximumSize(new Dimension(400, 30));		
		jregoladesc.setPreferredSize(new Dimension(400, 30));		
		
		Component fillprogetto2 = Box.createRigidArea(new Dimension(252,30));
		
		JLabel jregolacosto = new JLabel( lineaRegola.getSegno() + " " + lineaRegola.getCosto() + " " + lineaRegola.getMisura() );
		jregolacosto.setFont(font);
		jregolacosto.setMinimumSize(new Dimension(60, 30));
		jregolacosto.setMaximumSize(new Dimension(60, 30));		
		jregolacosto.setPreferredSize(new Dimension(60, 30));
		
		Component fillprogetto3 = Box.createRigidArea(new Dimension(570,30));	
		
		jlineaFattura.add(fillprogetto1);		
		jlineaFattura.add(jregoladesc);
		jlineaFattura.add(fillprogetto2);
		jlineaFattura.add(jregolacosto);
		jlineaFattura.add(fillprogetto3);		
		
		return jlineaFattura;
	}		
	
	@Override
	public void updateSize() {}
	
}
